CloudFormationで最新のAmazon Linux 2のAMI IDを取得してEC2を構築する
CloudFormationでEC2を構築するとき、AMI IDをどうやって保持するのか悩ましいです。
パラメータとして保持する?そうすると、リージョン毎にAMI IDは異なるので特定のリージョンでしか使えないCloudFormationテンプレートになってしまう。 Mappingsとして保持する?そうすると全リージョンの最新のAMI IDを記載するのがとてもめんどくさい。
そんなことを悩んでいたら、公開パラメータストアから最新のAMI IDを取得する方法を知ったのでやり方をご紹介いたします。
- 最新のECS-optimized AMI IDをParameter Storeから取得できるようになりました(Amazon Linuxもあるよ) | DevelopersIO
- AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI IDを取得する | Amazon Web Services ブログ
公開パラメータストアからAMI IDを取得する
次のコマンドをAWS CLIで実行すると、最新のAmazon Linux2のAMI IDを取得できます。
$ aws ssm get-parameter \ --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \ --region ap-northeast-1 { "Parameter": { "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", "Type": "String", "Value": "ami-0ff21806645c5e492", "Version": 22, "LastModifiedDate": 1567628887.33, "ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }
--query
オプションを使って、AMI IDの値だけ取り出してみます。
$ aws ssm get-parameter \ --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \ --query "Parameter.Value" \ --region ap-northeast-1 "ami-0ff21806645c5e492"
マネジメントコンソールを見てみると、Amazon Linux 2のAMI IDと一致していて、問題なく取得できていそうです。
他のリージョンでも試してみると、そのリージョンにあったAMI IDが取得できていそうです。
$ aws ssm get-parameter \ --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \ --query "Parameter.Value" \ --region us-east-1 "ami-0b69ea66ff7391e80" $ aws ssm get-parameter \ --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \ --query "Parameter.Value" \ --region us-west-2 "ami-04b762b4289fba92b"
パラメータストアを利用してCloudFormationテンプレートを作成する
SSMパラメータはCloudFormationのパラメータセクションから簡単に参照できます。 詳細は公式ドキュメントを参照ください。
具体的にCloudFormationテンプレートをあげると、次のように利用できます。
--- AWSTemplateFormatVersion: '2010-09-09' Parameters: Ec2ImageId: Type: AWS::SSM::Parameter::Value<String> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 Ec2InstanceType: Type: String Default: t3.nano Resources: SampleInstance: Type: AWS::EC2::Instance Properties: ImageId: !Ref Ec2ImageId InstanceType: !Ref Ec2InstanceType
CloudFormationでEC2を作成する
実際にCloudFormationでEC2を作成すると、公開パラメータストアで取得したAMI IDは、解決済みの値として参照することができます。
作られたEC2インスタンスを見てみても、問題なく最新のAmazon Linux 2のAMI IDで構築できていることが確認できます。
終わりに
公開パラメータストアを利用できることがわかって、CloudFormationにおいてEC2のAMI IDをどこに保存するか迷わなくなりました! CloudFormationでEC2を構築する際には、ぜひお試しください。